#define ORTHO_NEAR_PLANE -10000
#define ORTHO_FAR_PLANE 10000
+struct _GskVulkanRender
+{
+ GskRenderer *renderer;
+ GdkVulkanContext *vulkan;
+
+ graphene_matrix_t mvp;
+ int scale_factor;
+ VkExtent2D size;
+ VkRect2D scissor;
+
+ VkCommandPool command_pool;
+ VkCommandBuffer command_buffer;
+
+ GSList *render_passes;
+ GSList *cleanup_images;
+};
+
static void
gsk_vulkan_render_compute_mvp (GskVulkanRender *self)
{
for (l = self->render_passes; l; l = l->next)
{
- gsk_vulkan_render_pass_upload (l->data, self);
+ gsk_vulkan_render_pass_upload (l->data, self, self->command_buffer);
}
}
for (l = self->render_passes; l; l = l->next)
{
- gsk_vulkan_render_pass_draw (l->data, self);
+ gsk_vulkan_render_pass_draw (l->data, self, self->command_buffer);
}
vkCmdEndRenderPass (self->command_buffer);
g_slice_free (GskVulkanRender, self);
}
+
+GskRenderer *
+gsk_vulkan_render_get_renderer (GskVulkanRender *self)
+{
+ return self->renderer;
+}
}
static void
-gsk_vulkan_render_pass_upload_fallback (GskVulkanRenderOp *op,
- GskVulkanRender *render)
+gsk_vulkan_render_pass_upload_fallback (GskVulkanRenderPass *self,
+ GskVulkanRenderOp *op,
+ GskVulkanRender *render,
+ VkCommandBuffer command_buffer)
{
graphene_rect_t bounds;
GskRenderer *fallback;
cr = cairo_create (surface);
cairo_translate (cr, bounds.origin.x, bounds.origin.y);
- fallback = gsk_renderer_create_fallback (render->renderer,
+ fallback = gsk_renderer_create_fallback (gsk_vulkan_render_get_renderer (render),
&bounds,
cr);
gsk_renderer_render (fallback, op->node, NULL);
cairo_destroy (cr);
- op->source = gsk_vulkan_image_new_from_data (render->vulkan,
- render->command_buffer,
+ op->source = gsk_vulkan_image_new_from_data (self->vulkan,
+ command_buffer,
cairo_image_surface_get_data (surface),
cairo_image_surface_get_width (surface),
cairo_image_surface_get_height (surface),
void
gsk_vulkan_render_pass_upload (GskVulkanRenderPass *self,
- GskVulkanRender *render)
+ GskVulkanRender *render,
+ VkCommandBuffer command_buffer)
{
GskVulkanRenderOp *op;
guint i;
switch (op->type)
{
case GSK_VULKAN_OP_FALLBACK:
- gsk_vulkan_render_pass_upload_fallback (op, render);
+ gsk_vulkan_render_pass_upload_fallback (self, op, render, command_buffer);
break;
default:
void
gsk_vulkan_render_pass_draw (GskVulkanRenderPass *self,
- GskVulkanRender *render)
+ GskVulkanRender *render,
+ VkCommandBuffer command_buffer)
{
GskVulkanRenderOp *op;
guint i;
{
op = &g_array_index (self->render_ops, GskVulkanRenderOp, i);
- vkCmdDraw (render->command_buffer,
+ vkCmdDraw (command_buffer,
op->vertex_count, 1,
op->vertex_offset, 0);
}
GskRenderNode *node);
void gsk_vulkan_render_pass_upload (GskVulkanRenderPass *self,
- GskVulkanRender *render);
+ GskVulkanRender *render,
+ VkCommandBuffer command_buffer);
gsize gsk_vulkan_render_pass_count_vertices (GskVulkanRenderPass *self);
gsize gsk_vulkan_render_pass_collect_vertices (GskVulkanRenderPass *self,
VkDescriptorSet descriptor_set,
VkSampler sampler);
void gsk_vulkan_render_pass_draw (GskVulkanRenderPass *self,
- GskVulkanRender *render);
+ GskVulkanRender *render,
+ VkCommandBuffer command_buffer);
G_END_DECLS
typedef struct _GskVulkanRender GskVulkanRender;
typedef struct _GskVulkanVertex GskVulkanVertex;
-struct _GskVulkanRender
-{
- GskRenderer *renderer;
- GdkVulkanContext *vulkan;
-
- graphene_matrix_t mvp;
- int scale_factor;
- VkExtent2D size;
- VkRect2D scissor;
-
-
- VkCommandPool command_pool;
- VkCommandBuffer command_buffer;
-
- GSList *render_passes;
- GSList *cleanup_images;
-};
-
struct _GskVulkanVertex
{
float x;
VkCommandPool command_pool);
void gsk_vulkan_render_free (GskVulkanRender *self);
+GskRenderer * gsk_vulkan_render_get_renderer (GskVulkanRender *self);
+
void gsk_vulkan_render_add_cleanup_image (GskVulkanRender *self,
GskVulkanImage *image);